package com.stu.utils;


import java.io.File;
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;

/**
 * 能够进行文件上传的servlet类 
 * @author MuLing
 *
 */
public class FileUploadServlet extends HttpServlet implements LoggerUtils{ 

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public FileUploadServlet() {
		super();
	}
 
	public void destroy() {
		super.destroy();  
	}
 
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 存绝对路径
		// String filePath = "C://upload";
		// 存相对路径
		String filePath = getServletContext().getRealPath("/") + "upload";
		System.out.println(filePath);//输出存放上传文件所到的路径
		File uploadPath = new File(filePath);
		// 检查文件夹是否存在 不存在 创建一个
		if (!uploadPath.exists()) {
			uploadPath.mkdir();
		}
		// 文件最大容量 3M
		int fileMaxSize = 3 * 1024 * 1024; //TODO 没有处理如果大于 3 M 的情况，会抛出异常
		// 存放文件描述
		@SuppressWarnings("unused")
		String[] fileDiscription = { null, null };
		// 文件名
		String fileName = null;
		// 上传文件数
		int fileCount = 0;
		// 重命名策略
		FileRenamePolicy rfrp = new FileRenamePolicy();//如果文件存在，这里默认采用的是添加数字的重命名方法
		// 上传文件
		try {
			MultipartRequest mulit = new MultipartRequest(request, filePath,
					fileMaxSize, "UTF-8", rfrp);//取得上传文件，也可以去掉最后这个参数，采用cos 默认的重命名策略

			String userName = mulit.getParameter("userName");
			System.out.println(userName);

			@SuppressWarnings("rawtypes") 
			Enumeration filesname = mulit.getFileNames();//取得上传的所有文件(相当于标识) 
			while (filesname.hasMoreElements()) {
				String name = (String) filesname.nextElement();//标识
				System.out.println(name);
				fileName = mulit.getFilesystemName(name); //取得文件名
				String contentType = mulit.getContentType(name);//工具标识取得的文件类型
				if (fileName != null) {
					fileCount++;
				}
				System.out.println("文件名：" + fileName);
				System.out.println("文件类型： " + contentType); 
			}
			System.out.println("共上传" + fileCount + "个文件！");
		} catch (Exception e) {
			logger.error(e);
			System.out.println("文件上传失败，请查看是否大于"+fileMaxSize+" k，或者文件类型是否正确");
		} 
	}
 
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException { 
		this.doGet(request, response);
	} 
	
	public void init() throws ServletException {
	}

}
